/* eslint-disable indent */
/**
 * 存储系统token和登录人信息
 */
// 导入登录接口
import { getUserInfo, login, getUserDetailById } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
// 导入路由重置方法
import { resetRouter } from '@/router'
export default {
    // 避免冲突命名空间
    namespaced: true,
    // 存数据
    state: {
        // token
        token: getToken() || null,
        // 当前登录人信息
        userInfo: {}
    },
    // 修改数据
    mutations: {
        // 存储token
        setToken(state, token) {
            // 只是存到内存
            state.token = token
                // 持久化 本地存一份(本地硬盘)
            setToken(token)
        },
        // 删除token
        delToken(state) {
            state.token = null
            removeToken()
        },
        // 存登录人信息
        setUserInfo(state, userInfo) {
            state.userInfo = userInfo
        },
        // 删除登录人信息
        delUserInfo(state) {
            state.userInfo = {}
        }
    },
    // 调用后台接口
    actions: {
        // 退出登录 清除token和当前登录人信息
        logout(ctx) {
            // 删除token
            ctx.commit('delToken')
                // 删除登录人信息
            ctx.commit('delUserInfo')
                // 重置路由和清空菜单数据
            resetRouter()
                // 重置菜单数据
            ctx.commit('menus/setMenuList', [], { root: true })
        },
        /**
         * 登录获取token并存储
         * @param {*} ctx
         * @param {*} loginForm
         */
        async login(ctx, loginForm) {
            // 调用登录接口
            const res = await login(loginForm)
            ctx.commit('setToken', res)
        },
        /**
         * 获取当前登录人信息
         * @param {*} ctx
         */
        async getUserInfo(ctx) {
            // 获取用户信息
            const userInfo = await getUserInfo()
                // 获取用户头像
            const userPhoto = await getUserDetailById(userInfo.userId)
                // eslint-disable-next-line object-curly-spacing
            ctx.commit('setUserInfo', {...userInfo, ...userPhoto })
            return userInfo.roles
        }
    }
    // eslint-disable-next-line eol-last
}